#pragma once
#define NOMINMAX
#define _USE_MATH_DEFINES
#include "sceneitem.h"
#define NOMINMAX
#include <iostream>
#include <typeinfo>
// --------------------
/*#include <OpenMesh/Core/IO/MeshIO.hh>

#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
#include <OpenMesh/Core/Geometry/VectorT.hh>

#include "Point3.h"

class Camera;

struct MyTraits : OpenMesh::DefaultTraits
{
  // Let Point and Normal be a vector of doubles
	typedef GGL::Point3f Point;
	typedef GGL::Point3f Normal;

	OpenMesh::Vec3f fa;

  // Already defined in OpenMesh::DefaultTraits
   HalfedgeAttributes( OpenMesh::Attributes::PrevHalfedge );
  
  // Uncomment next line to disable attribute PrevHalfedge
  // HalfedgeAttributes( OpenMesh::Attributes::None );
  //
  // or
  //
  // HalfedgeAttributes( 0 );
};

typedef OpenMesh::PolyMesh_ArrayKernelT<MyTraits>  MyMesh;


class OpenMeshHalfEdge :
	public SceneItem
{
public:
	enum CreateDirectionType
	{
		DIRECTIONX,
		DIRECTIONY,
		DIRECTIONZ,
	};
public:
	enum DrawMode
	{
		WireFrame,
		Smooth,
	};
private:
	MyMesh meshData;

public:
	OpenMeshHalfEdge(QString &name);
	OpenMeshHalfEdge();
	~OpenMeshHalfEdge(void);

	void draw(int mode,Camera *currentCamera);
	void drawForSelection(int mode=Object,int type=Stencil,unsigned int ID=0);

	void createBox(float x=0.0f,float y=0.0f,float z=0.0f,float lengthX=10.0f,float lengthY=10.0f,float lengthZ=10.0f,int segx=1,int segy=1,int segz=1);
	void createBall(enum CreateDirectionType type=DIRECTIONZ,float x=0.0f,float y=0.0f,float z=0.0f,float r=5.0f,int seglongitude=20,int seglatitude=5);

	void createCylinder(float x=0.0f,float y=0.0f,float z=0.0f,float radius=5.0f, float height=10.0f, int seglongitude=10,int segradius=1,int segheight=1);

	void updateBoundingBox();
};
*/